home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / LEDA_src.lha / LEDA-3.1c-source / src / arith / isparc_karat.s < prev    next >
Encoding:
Text File  |  1994-11-17  |  5.9 KB  |  455 lines

  1. gcc2_compiled.:
  2. ___gnu_compiled_c:
  3. .text
  4.     .align 4
  5.     .global _karatsuba_mult
  6.     .proc    020
  7. _karatsuba_mult:
  8.     !#PROLOGUE# 0
  9.     save %sp,-112,%sp
  10.     !#PROLOGUE# 1
  11.     cmp %i4,15
  12.     bg L2
  13.     srl %i4,31,%o0
  14.     mov 0,%l0
  15.     cmp %l0,%i4
  16.     bge L27
  17.     nop
  18. L6:
  19.     sll %l0,2,%o0
  20.     add %l0,1,%l0
  21.     cmp %l0,%i4
  22.     bl L6
  23.     st %g0,[%i0+%o0]
  24.     mov 0,%l0
  25.     cmp %l0,%i4
  26. L27:
  27.     bge L1
  28.     nop
  29. L10:
  30.     sll %l0,2,%o2
  31.     add %i0,%o2,%o0
  32.     mov %i1,%o1
  33.     ld [%i2+%o2],%o2
  34.     call _vecmuladd,0
  35.     mov %i4,%o3
  36.     add %l0,%i4,%o1
  37.     sll %o1,2,%o1
  38.     add %l0,1,%l0
  39.     cmp %l0,%i4
  40.     bl L10
  41.     st %o0,[%i0+%o1]
  42.     b,a L1
  43. L2:
  44.     add %i4,%o0,%o0
  45.     sra %o0,1,%l4
  46.     add %i4,%l4,%l3
  47.     sll %i4,2,%o0
  48.     add %i0,%o0,%o0
  49.     mov %i1,%o1
  50.     mov %i2,%o2
  51.     mov %i0,%o3
  52.     call _karatsuba_mult,0
  53.     mov %l4,%o4
  54.     sll %l4,2,%o0
  55.     add %i1,%o0,%l0
  56.     mov %i1,%o0
  57.     mov %l0,%o1
  58.     call _vecgt,0
  59.     mov %l4,%o2
  60.     cmp %o0,0
  61.     be L11
  62.     mov 1,%l1
  63.     mov %i3,%o0
  64.     mov %i1,%o1
  65.     b L25
  66.     mov %l0,%o2
  67. L11:
  68.     mov 0,%l1
  69.     sll %l4,2,%o1
  70.     mov %i3,%o0
  71.     add %i1,%o1,%o1
  72.     mov %i1,%o2
  73. L25:
  74.     call _vecsub,0
  75.     mov %l4,%o3
  76.     sll %l4,2,%l0
  77.     add %i2,%l0,%o0
  78.     mov %i2,%o1
  79.     call _vecgt,0
  80.     mov %l4,%o2
  81.     cmp %o0,0
  82.     be L13
  83.     add %i3,%l0,%o0
  84.     xor %l1,1,%l1
  85.     add %i2,%l0,%o1
  86.     b L26
  87.     mov %i2,%o2
  88. L13:
  89.     sll %l4,2,%o2
  90.     add %i3,%o2,%o0
  91.     mov %i2,%o1
  92.     add %i2,%o2,%o2
  93. L26:
  94.     call _vecsub,0
  95.     mov %l4,%o3
  96.     sll %i4,2,%o0
  97.     sll %l4,2,%l0
  98.     add %i3,%o0,%o0
  99.     mov %i3,%o1
  100.     add %i3,%l0,%o2
  101.     mov %i0,%o3
  102.     call _karatsuba_mult,0
  103.     mov %l4,%o4
  104.     mov %i3,%o0
  105.     add %i1,%l0,%o1
  106.     add %i2,%l0,%o2
  107.     mov %i0,%o3
  108.     call _karatsuba_mult,0
  109.     mov %l4,%o4
  110.     cmp %l1,0
  111.     bne L15
  112.     mov 0,%l0
  113.     cmp %l0,%l4
  114.     bge,a L28
  115.     sll %l4,2,%l0
  116. L19:
  117.     sll %l0,2,%o0
  118.     add %i4,%l0,%o1
  119.     sll %o1,2,%o1
  120.     ld [%i0+%o1],%o1
  121.     add %l0,1,%l0
  122.     cmp %l0,%l4
  123.     bl L19
  124.     st %o1,[%i0+%o0]
  125.     sll %l4,2,%l0
  126. L28:
  127.     sll %l3,2,%l3
  128.     add %i0,%l3,%l1
  129.     sll %i4,2,%o3
  130.     add %i0,%o3,%l2
  131.     st %l4,[%sp+92]
  132.     add %i0,%l0,%o0
  133.     mov %l1,%o1
  134.     mov %l2,%o2
  135.     add %i3,%o3,%o3
  136.     mov %i3,%o4
  137.     call _vecadd4carry,0
  138.     mov 0,%o5
  139.     mov %o0,%o5
  140.     add %i3,%l0,%l0
  141.     st %l4,[%sp+92]
  142.     mov %l2,%o0
  143.     mov %l1,%o1
  144.     add %i3,%l3,%o2
  145.     mov %l0,%o3
  146.     call _vecadd4carry,0
  147.     mov %i3,%o4
  148.     mov %o0,%o5
  149.     mov %l1,%o0
  150.     mov %l0,%o1
  151.     mov %o5,%o2
  152.     call _vecaddPLACE,0
  153.     mov %l4,%o3
  154.     b,a L1
  155. L15:
  156.     cmp %l0,%l4
  157.     bge,a L29
  158.     sll %l4,2,%l0
  159. L24:
  160.     sll %l0,2,%o0
  161.     add %i4,%l0,%o1
  162.     sll %o1,2,%o1
  163.     ld [%i0+%o1],%o1
  164.     add %l0,1,%l0
  165.     cmp %l0,%l4
  166.     bl L24
  167.     st %o1,[%i0+%o0]
  168.     sll %l4,2,%l0
  169. L29:
  170.     sll %l3,2,%l3
  171.     add %i0,%l3,%l1
  172.     sll %i4,2,%o4
  173.     add %i0,%o4,%l2
  174.     st %l4,[%sp+92]
  175.     add %i0,%l0,%o0
  176.     mov %l1,%o1
  177.     mov %l2,%o2
  178.     mov %i3,%o3
  179.     add %i3,%o4,%o4
  180.     call _vecadd3subcarry,0
  181.     mov 0,%o5
  182.     mov %o0,%o5
  183.     add %i3,%l0,%l0
  184.     st %l4,[%sp+92]
  185.     mov %l2,%o0
  186.     mov %l1,%o1
  187.     mov %l0,%o2
  188.     mov %i3,%o3
  189.     call _vecadd3subcarry,0
  190.     add %i3,%l3,%o4
  191.     mov %o0,%o5
  192.     mov %l1,%o0
  193.     mov %l0,%o1
  194.     mov %o5,%o2
  195.     call _vecaddscarry,0
  196.     mov %l4,%o3
  197. L1:
  198.     ret
  199.     restore
  200.     .align 4
  201.     .proc    016
  202. _vecsub:
  203.     !#PROLOGUE# 0
  204.     save %sp,-104,%sp
  205.     !#PROLOGUE# 1
  206.     cmp %i3,0
  207.     ble L32
  208.     mov 0,%o2
  209. L34:
  210.     ld [%i1],%o0
  211.     add %i1,4,%i1
  212.     ld [%i2],%o1
  213.     add %i2,4,%i2
  214.     mov %i0,%o3
  215.     call _PLACEsub,0
  216.     add %i0,4,%i0
  217.     add %i3,-1,%i3
  218.     cmp %i3,0
  219.     bg L34
  220.     mov %o0,%o2
  221. L32:
  222.     and %o2,1,%i0
  223.     ret
  224.     restore
  225.     .align 4
  226.     .proc    016
  227. _vecadd4carry:
  228.     !#PROLOGUE# 0
  229.     save %sp,-104,%sp
  230.     !#PROLOGUE# 1
  231.     ld [%fp+92],%l6
  232.     cmp %l6,0
  233.     be L35
  234.     mov %i5,%o0
  235.     ld [%i1],%o1
  236.     mov 0,%o2
  237.     call _PLACEadd,0
  238.     mov %i0,%o3
  239.     mov %o0,%l5
  240.     ld [%i0],%o0
  241.     ld [%i2],%o1
  242.     mov 0,%o2
  243.     call _PLACEadd,0
  244.     mov %i0,%o3
  245.     mov %o0,%l4
  246.     ld [%i0],%o0
  247.     ld [%i3],%o1
  248.     mov 0,%o2
  249.     call _PLACEadd,0
  250.     mov %i0,%o3
  251.     mov %o0,%l3
  252.     ld [%i0],%o0
  253.     ld [%i4],%o1
  254.     mov 0,%o2
  255.     call _PLACEadd,0
  256.     mov %i0,%o3
  257.     mov 1,%i5
  258.     cmp %i5,%l6
  259.     bge L38
  260.     mov %o0,%l2
  261. L40:
  262.     sll %i5,2,%l1
  263.     add %i0,%l1,%l0
  264.     ld [%i1+%l1],%o0
  265.     ld [%i2+%l1],%o1
  266.     mov %l5,%o2
  267.     call _PLACEadd,0
  268.     mov %l0,%o3
  269.     mov %o0,%l5
  270.     ld [%l0],%o0
  271.     ld [%i3+%l1],%o1
  272.     mov %l4,%o2
  273.     call _PLACEadd,0
  274.     mov %l0,%o3
  275.     mov %o0,%l4
  276.     ld [%l0],%o0
  277.     ld [%i4+%l1],%o1
  278.     mov %l3,%o2
  279.     call _PLACEadd,0
  280.     mov %l0,%o3
  281.     mov %o0,%l3
  282.     ld [%l0],%o0
  283.     mov 0,%o1
  284.     mov %l2,%o2
  285.     call _PLACEadd,0
  286.     mov %l0,%o3
  287.     add %i5,1,%i5
  288.     cmp %i5,%l6
  289.     bl L40
  290.     mov %o0,%l2
  291. L38:
  292.     add %l5,%l4,%i0
  293.     add %i0,%l3,%i0
  294.     add %i0,%l2,%i0
  295. L35:
  296.     ret
  297.     restore
  298.     .align 4
  299.     .proc    04
  300. _vecadd3subcarry:
  301.     !#PROLOGUE# 0
  302.     save %sp,-104,%sp
  303.     !#PROLOGUE# 1
  304.     ld [%fp+92],%l6
  305.     cmp %l6,0
  306.     be L41
  307.     mov %i5,%o0
  308.     cmp %o0,0
  309.     bl L43
  310.     mov 0,%o2
  311.     ld [%i1],%o1
  312.     call _PLACEadd,0
  313.     mov %i0,%o3
  314.     mov %o0,%l5
  315.     ld [%i0],%o0
  316.     ld [%i2],%o1
  317.     mov 0,%o2
  318.     call _PLACEadd,0
  319.     mov %i0,%o3
  320.     mov %o0,%l4
  321.     ld [%i0],%o0
  322.     ld [%i3],%o1
  323.     mov 0,%o2
  324.     call _PLACEadd,0
  325.     mov %i0,%o3
  326.     mov %o0,%l3
  327.     ld [%i0],%o0
  328.     ld [%i4],%o1
  329.     b L49
  330.     mov 0,%o2
  331. L43:
  332.     mov 0,%l5
  333.     ld [%i1],%o0
  334.     ld [%i2],%o1
  335.     call _PLACEadd,0
  336.     mov %i0,%o3
  337.     mov %o0,%l4
  338.     ld [%i0],%o0
  339.     ld [%i3],%o1
  340.     mov 0,%o2
  341.     call _PLACEadd,0
  342.     mov %i0,%o3
  343.     mov %o0,%l3
  344.     ld [%i0],%o0
  345.     ld [%i4],%o1
  346.     mov 1,%o2
  347. L49:
  348.     call _PLACEsub,0
  349.     mov %i0,%o3
  350.     mov 1,%i5
  351.     cmp %i5,%l6
  352.     bge L46
  353.     mov %o0,%l2
  354. L48:
  355.     sll %i5,2,%l1
  356.     add %i0,%l1,%l0
  357.     ld [%i1+%l1],%o0
  358.     ld [%i2+%l1],%o1
  359.     mov %l5,%o2
  360.     call _PLACEadd,0
  361.     mov %l0,%o3
  362.     mov %o0,%l5
  363.     ld [%l0],%o0
  364.     ld [%i3+%l1],%o1
  365.     mov %l4,%o2
  366.     call _PLACEadd,0
  367.     mov %l0,%o3
  368.     mov %o0,%l4
  369.     ld [%l0],%o0
  370.     mov 0,%o1
  371.     mov %l3,%o2
  372.     call _PLACEadd,0
  373.     mov %l0,%o3
  374.     mov %o0,%l3
  375.     ld [%l0],%o0
  376.     ld [%i4+%l1],%o1
  377.     mov %l2,%o2
  378.     call _PLACEsub,0
  379.     mov %l0,%o3
  380.     add %i5,1,%i5
  381.     cmp %i5,%l6
  382.     bl L48
  383.     mov %o0,%l2
  384. L46:
  385.     add %l5,%l4,%i0
  386.     add %i0,%l3,%i0
  387.     sub %i0,%l2,%i0
  388. L41:
  389.     ret
  390.     restore
  391.     .align 4
  392.     .proc    016
  393. _vecaddPLACE:
  394.     !#PROLOGUE# 0
  395.     save %sp,-104,%sp
  396.     !#PROLOGUE# 1
  397.     cmp %i3,0
  398.     ble L52
  399.     mov %i2,%o1
  400. L54:
  401.     ld [%i1],%o0
  402.     add %i1,4,%i1
  403.     mov %i0,%o3
  404.     add %i0,4,%i0
  405.     call _PLACEadd,0
  406.     mov 0,%o2
  407.     add %i3,-1,%i3
  408.     cmp %i3,0
  409.     bg L54
  410.     mov %o0,%o1
  411. L52:
  412.     ret
  413.     restore %g0,%o1,%o0
  414.     .align 4
  415.     .proc    016
  416. _vecaddscarry:
  417.     !#PROLOGUE# 0
  418.     save %sp,-104,%sp
  419.     !#PROLOGUE# 1
  420.     orcc %i2,%g0,%o0
  421.     bl L56
  422.     cmp %i3,0
  423.     ble L63
  424.     mov %o0,%o2
  425. L60:
  426.     ld [%i1],%o0
  427.     add %i1,4,%i1
  428.     mov %i0,%o3
  429.     add %i0,4,%i0
  430.     mov %o2,%o1
  431.     call _PLACEadd,0
  432.     mov 0,%o2
  433.     add %i3,-1,%i3
  434.     cmp %i3,0
  435.     bg L60
  436.     mov %o0,%o2
  437.     b,a L63
  438. L56:
  439.     ble L63
  440.     mov 1,%o2
  441. L65:
  442.     ld [%i1],%o0
  443.     add %i1,4,%i1
  444.     mov %i0,%o3
  445.     add %i0,4,%i0
  446.     call _PLACEsub,0
  447.     mov 0,%o1
  448.     add %i3,-1,%i3
  449.     cmp %i3,0
  450.     bg L65
  451.     mov %o0,%o2
  452. L63:
  453.     ret
  454.     restore %g0,%o2,%o0
  455.